CloudFormationでSageMaker Studioの自動シャットダウン設定を有効にする

CloudFormationでSageMaker Studioの自動シャットダウン設定を有効にする

Clock Icon2024.11.18

はじめに

コンサルティング部の神野です。

2024年9月にSageMaker Studioがアイドル状態のアプリケーションを自動シャットダウンできるようになりました!

https://dev.classmethod.jp/articles/new-amazon-sagemaker-studio-supported-application-auto-shutdown/

コンソール上からは設定できますが、CloudFormationでドメインを作成する際に自動シャットダウンを有効にした状態で作成できないかな〜と思っていたところ、雰囲気としてできそうな項目(IdleSettings)がありました。
実際にCloudFormationのテンプレートを書いて、自動シャットダウン設定を有効にした状態でドメインを作成してみました。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-idlesettings.html

実装

ドメイン作成テンプレートコードを一部抜粋しています。
ポイントはDefaultUserSettingsDefaultSpaceSettingsの両方にIdleSettingsを記載しているところです。
両方に記載する理由は、SageMaker Studio スペースの種類がPrivateShare with my domainの2種類存在し、DefaultUserSettingsPrivateスペース作成時に、DefaultSpaceSettingsShare with my domainスペース作成時にそれぞれ反映されるデフォルトの設定だからです。

(最初はその仕組みに気づかず、DefaultSpaceSettingsの箇所だけ記載して、Privateスペースの自動シャットダウンが有効にならずはまりました...)

CloudFormationテンプレート

ドメイン作成テンプレートの一部抜粋
# 一部抜粋しています。
StudioDomain:
    Type: AWS::SageMaker::Domain
    Properties:
      AppNetworkAccessType: PublicInternetOnly
      AuthMode: IAM
      DefaultUserSettings:
        ExecutionRole: !GetAtt SageMakerExecutionRole.Arn
        StudioWebPortal: ENABLED
        JupyterLabAppSettings:
          AppLifecycleManagement:
          	# 追加
            IdleSettings:
              IdleTimeoutInMinutes: 60
              LifecycleManagement: ENABLED
              MaxIdleTimeoutInMinutes: 525600
              MinIdleTimeoutInMinutes: 60
      DomainName: TestDomain
      SubnetIds: XXX
      VpcId: XXXX
      DefaultSpaceSettings:
        ExecutionRole: !GetAtt SageMakerExecutionRole.Arn
        JupyterLabAppSettings:
          AppLifecycleManagement:
          	# 追加
            IdleSettings:
              IdleTimeoutInMinutes: 60
              LifecycleManagement: ENABLED
              MaxIdleTimeoutInMinutes: 525600
              MinIdleTimeoutInMinutes: 60

IdleSettingsの各パラメータについて

パラメータ名 説明 設定値
IdleTimeoutInMinutes アプリケーションが非アクティブ状態と判断されてからシャットダウンされるまでの時間(分) 60
LifecycleManagement 自動シャットダウン機能の有効/無効を設定 ENABLED
MaxIdleTimeoutInMinutes ユーザーが設定可能な最大のアイドルタイムアウト時間(分) 525600
MinIdleTimeoutInMinutes ユーザーが設定可能な最小のアイドルタイムアウト時間(分) 60

この設定により、アプリケーションが60分間非アクティブ状態が続くと自動的にシャットダウンされます。
また、ユーザーが60分〜525600分の間で任意のタイムアウト時間を設定することも可能にします。

補足

補足として、ドメイン全体の設定だけでなく、ユーザープロファイルに紐づいた自動シャットダウン設定も作成することも可能です。

ユーザープロファイル作成テンプレートの一部抜粋
# 一部抜粋しています。
StudioUserProfile:
    Type: AWS::SageMaker::UserProfile
    Properties:
      DomainId: !GetAtt StudioDomain.DomainId
      UserProfileName: StudioUserTest
      UserSettings:
        ExecutionRole: !GetAtt SageMakerExecutionRole.Arn
        JupyterLabAppSettings:
          AppLifecycleManagement:
          	# 追加
            IdleSettings:
              IdleTimeoutInMinutes: 60
              LifecycleManagement: ENABLED
              MaxIdleTimeoutInMinutes: 525600
              MinIdleTimeoutInMinutes: 60

テンプレートを実行してみた

上記コードを含んだテンプレートを実行し、自動シャットダウン設定を入れてドメインを作成してみました。
作成したドメインのJupyter Labの項目を見てましょう。

CleanShot 2024-11-17 at 12.32.15@2x

CleanShot 2024-11-17 at 12.32.34@2x

ドメイン側で自動シャットダウンの設定が有効になっていますね!
次にStudioに移動して、JupyterLabのスペースを作成します。

Private Space作成

任意の名前を入れて、Sharing:Privateを選択してCreate spaceボタンを押下します。

CleanShot 2024-11-17 at 12.33.15@2x

作成すると、Idle Shutdown項目が表示され、60 で設定されているため自動的に設定が有効になっていますね!

CleanShot 2024-11-17 at 12.33.38@2x

Share with my domain Space作成

任意の名前を入れて、Sharing:Share with my domainを選択してCreate spaceボタンを押下します。

CleanShot 2024-11-17 at 12.34.05@2x

こちらも作成すると、Idle Shutdown項目が表示され、60 で設定されているため自動的に設定が有効になっていますね!

CleanShot 2024-11-17 at 12.34.52@2x

これでCloudFormationからドメインの自動シャットダウンを有効にして、その設定がスペースにも反映されていることが確認できました!

おわりに

CloudFormationでSageMaker Studioの自動シャットダウン設定を有効にする方法はいかがだったでしょうか。
ドメインの作成手順をCloudFormationなどで自動化している場合は簡単に組み込めるので、有効にしてみるのも手ではないでしょうか!

このブログが少しでも参考になったら幸いです。最後までご覧いただきありがとうございました!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.